package org.iamd.domain.business;

import org.iamd.util.IMsgKeys;
import org.iamd.util.Messenger;
import org.iamd.util.Messenger.ApplicationLocales;

/**
 * Изключение произлизащо от бизнес действие. Предоставя локализирана информация, както за
 * потребителя, така и за администратора.
 * 
 * @author Ивайло Атанасов
 */
public class BusinessException extends ApplicationException {

	/** Сериен номер на класа. */
	private static final long serialVersionUID = -5217570780813732155L;

	/** Потребителско съобщение. */
	private String userMessage;

	/**
	 * Конструктор без пораждащо изключение и допълнителни параметри за съобщението.
	 * 
	 * @param key
	 *            ключът, под който се търси текста на изключението
	 */
	public BusinessException(IMsgKeys key) {
		this(key, null, null);
	}

	/**
	 * Конструктор без пораждащо изключение.
	 * 
	 * @param key
	 *            ключът, под който се търси текста на изключението
	 * @param params
	 *            допълнителни параметри за текста на изключението
	 */
	public BusinessException(IMsgKeys key, Object[] params) {
		this(key, params, null);
	}

	/**
	 * Конструиране на изключението. Извикване на супер конструктора.
	 * 
	 * @param key
	 *            ключът, под който се търси текста на изключението
	 * @param params
	 *            допълнителни параметри за текста на изключението
	 * @param cause
	 *            пораждащо изключение
	 */
	public BusinessException(IMsgKeys key, Object[] params, Throwable cause) {
		super(key, params, cause);
		this.userMessage = Messenger.formMessage(key, params, ApplicationLocales.USER_LOCALE);
	}

	/**
	 * Конструктор без допълнителни параметри за съобщението.
	 * 
	 * @param key
	 *            ключът, под който се търси текста на изключението
	 * @param cause
	 *            пораждащо изключение
	 */
	public BusinessException(IMsgKeys key, Throwable cause) {
		this(key, null, cause);
	}

	/**
	 * @return локализираното потребителско съобщение
	 */
	public String getUserMessage() {
		return this.userMessage;
	}

}